﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using HRM.Properties;
using WeifenLuo.WinFormsUI.Docking;
using HRM.HRMServiceProxy;
using System.Globalization;
using HRM.Controller;
namespace HRM
{
    public partial class frmOfferedInfo : FormBase
    {
        bool isChange = false;
        DialogResult dlgResult;
        PensionerClient wcfPensioner;
        PensionerInfo PensionerInfo;
        EmployeeClient wcfEmployee;
        EmployeeInfo EmployeeInfo;
        PremiumClient _wcfPremium;
        MainServiceClient wcfMainService;
        BasicSalaryClient _wcfBasicSalary;

        RoleRightInfo listRole;
        DateTime _fromDate = DateTime.MinValue;
        DateTime _toDate = DateTime.MinValue;
        int PensionerID;
        int GrantID;
        int EmployeeID;
        decimal _BasicSalary = 0;
        public frmOfferedInfo(int _PensionerID, RoleRightInfo _listRole, int _EmployeeID)
        {
            InitializeComponent();
            //Language();
            dlgResult = DialogResult.Cancel;
            UISetting.LoadGrantParent(ref cboGrant);
            txtDate.Text = DateTime.Now.ToString("dd/MM/yyyy");
            DateTextBox dtbNgayDe = new DateTextBox(txtDateOfBirth);
            DateTextBox dtbFrom = new DateTextBox(txtFromDate);
            DateTextBox dtbTo = new DateTextBox(txtToDate);
            wcfPensioner = Service.Pensioner();
            wcfEmployee = Service.Employee();
            _wcfPremium = Service.Premium();
            wcfMainService = Service.MainService();
            _wcfBasicSalary = Service.BasicSalary();
            lstEmployee.Visible = false;

            Init_Control();
            
            if (_PensionerID > 0)
            {
                PensionerInfo = wcfPensioner.Pensioner_GetInfo(_PensionerID);
                Info2Form();
                GetEmployeeName(PensionerInfo.EmployeeID);
            }
            PensionerID = _PensionerID;

            if (_EmployeeID > 0)
            {
                GetEmployeeName(_EmployeeID);
                //btnSelectEmp.Visible = false;
            }
            // else
            //btnSelectEmp.Visible = true;

            listRole = _listRole;
            btnNew.Enabled = listRole.Create;
            btnSave.Enabled = listRole.Update;            
            EmployeeID = _EmployeeID;
            //
            txtSIBookNo.Focus();
        }

        private void Init_Control()
        {
            //Init grid
            TabQTBHXH_AddColumnPremium();
            BuildBasicSalaryGrid();
            //
            LoadBasicSalary();
        }

        private void Language()
        {
            if (this.Tag != null)
                this.Text = UpdateUI.GetString("denghihuongtrocap");
            UpdateUI.Load_ToolStrip(ref toolStrip1);
            UpdateUI.Load_Panel(ref panel2);
        }

        private void Info2Form()//Hiển thị thông tin ra form
        {
            cboGrant.SelectedValue = PensionerInfo.GrantID;
            cboSubGrant.SelectedValue = PensionerInfo.SubGrantID;
            txtAmount.Text = PensionerInfo.Amount.ToString("#,##0.0");
            txtAtHome.Text = PensionerInfo.AtHome.ToString();
            txtConcentrate.Text = PensionerInfo.Concentrate.ToString();
            txtDate.Text = PensionerInfo.Date.ToString("dd/MM/yyyy");
            txtDescription.Text = PensionerInfo.Description;
            txtInherit.Text = PensionerInfo.Inherit.ToString();
            txtCount.Text = txtIntime.Text = PensionerInfo.InTime.ToString();
            txtStateParturition.Text = PensionerInfo.StateParturition;
            txtInheritFoetus.Text = PensionerInfo.InheritFoetus.ToString();
            txtDeclineWork.Text = PensionerInfo.DeclineLevel.ToString();
            txtConditionWork.Text = PensionerInfo.ConditiontoWork;
            txtInsuranceTime.Text = PensionerInfo.InsuranceTime;
            txtSIBookNo.Tag = PensionerInfo.EmployeeID;
            txtRate.Text = PensionerInfo.Rate.ToString("#,##0");
            txtSalary.Text = PensionerInfo.Salary.ToString("#,##0.0#");
            txtAVGAmount.Text = PensionerInfo.AVGAmount.ToString("#,##0.0#");
            txtMinSalary.Text = PensionerInfo.BasicSalary.ToString("#,##0.0#");
            txtFromDate.Text = PensionerInfo.FromDate == DateTime.MinValue ? "" : PensionerInfo.FromDate.ToString("dd/MM/yyyy");
            txtToDate.Text = PensionerInfo.ToDate == DateTime.MinValue ? "" : PensionerInfo.ToDate.ToString("dd/MM/yyyy");

            txtDateOfBirth.Text = PensionerInfo.DateOfBirth == DateTime.MinValue ? "" : PensionerInfo.DateOfBirth.ToString("dd/MM/yyyy");
            txtChildNumber.Text = PensionerInfo.ChildNumber < 0 ? "" : PensionerInfo.ChildNumber.ToString();
            
            isChange = false;
        }

        private void Form2Info()//Chuyển dữ liệu từ form nhập vào Info
        {
            PensionerInfo = new PensionerInfo();
            PensionerInfo.ID = PensionerID;
            PensionerInfo.EmployeeID = Convert.ToInt32(txtSIBookNo.Tag);
            PensionerInfo.GrantID = Convert.ToInt32(cboGrant.SelectedValue);
            PensionerInfo.SubGrantID = Convert.ToInt32(cboSubGrant.SelectedValue);
            PensionerInfo.Amount = UISetting.GetDecimalNo(txtAmount.Text);
            PensionerInfo.Date = DateTime.ParseExact(txtDate.Text, "dd/MM/yyyy", null);

            PensionerInfo.InsuranceTime = txtInsuranceTime.Text;
            if (txtAtHome.Text.Trim().Length == 0)
                PensionerInfo.AtHome = 0;
            else
                PensionerInfo.AtHome = Convert.ToInt32(txtAtHome.Text);
            if (txtConcentrate.Text.Trim().Length == 0)
                PensionerInfo.Concentrate = 0;
            else
                PensionerInfo.Concentrate = Convert.ToInt32(txtConcentrate.Text);
            if (txtIntime.Text.Trim().Length == 0)
                PensionerInfo.InTime = 0;
            else
                PensionerInfo.InTime = Convert.ToInt32(txtIntime.Text);
            if (txtInherit.Text.Trim().Length == 0)
                PensionerInfo.Inherit = 0;
            else
                PensionerInfo.Inherit = Convert.ToInt32(txtInherit.Text);
            if (txtDeclineWork.Text.Trim().Length == 0)
                PensionerInfo.DeclineLevel = 0;
            else
                PensionerInfo.DeclineLevel = Convert.ToDecimal(txtDeclineWork.Text);
            if (txtInheritFoetus.Text.Trim().Length == 0)
                PensionerInfo.InheritFoetus = 0;
            else
                PensionerInfo.InheritFoetus = Convert.ToInt32(txtInheritFoetus.Text);
            PensionerInfo.ConditiontoWork = txtConditionWork.Text;
            PensionerInfo.StateParturition = txtStateParturition.Text;
            PensionerInfo.Description = txtDescription.Text;
            PensionerInfo.FromDate = UISetting.GetDate(txtFromDate.Text);
            PensionerInfo.ToDate = UISetting.GetDate(txtToDate.Text);
            PensionerInfo.BasicSalary = Convert.ToDecimal(txtMinSalary.Text);
            PensionerInfo.Salary = Convert.ToDecimal(txtSalary.Text);
            PensionerInfo.AVGAmount = Convert.ToDecimal(txtAVGAmount.Text);
            PensionerInfo.Rate = Convert.ToDecimal(txtRate.Text);

            PensionerInfo.DateOfBirth = UISetting.GetDate(txtDateOfBirth.Text);
            PensionerInfo.ChildNumber = !String.IsNullOrEmpty(txtChildNumber.Text) ? Globals.Object_GetValue<int>(txtChildNumber.Text) : 0;
        }

        private void btnNew_Click(object sender, EventArgs e)
        {
            if (!listRole.Create)
            {
                MessageBox.Show(UpdateUI.GetString("khongcoquyenthemmoi"), UIParamater.TitleProject, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            PensionerID = 0;
            PensionerInfo = new PensionerInfo();
            txtAtHome.Text = "";
            txtConcentrate.Text = "";
            txtDate.Text = DateTime.Now.ToString("dd/MM/yyyy");
            txtAmount.Text = "";
            txtInherit.Text = "";
            txtIntime.Text = "";
            txtInsuranceTime.Text = "";
            txtAVGAmount.Text = "0";
            txtDescription.Text = "";
            txtSIBookNo.Text = "";
            txtFullName.Text = "";

            txtFromDate.Text = txtToDate.Text = txtCount.Text = txtSoNgayCN.Text
            = txtChildNumber.Text = txtDateOfBirth.Text
            = txtMinSalary.Text = txtSalary.Text = txtAmount.Text
            = "";
            txtSIBookNo.Focus();
        }

        bool CheckValid()
        {
            DateTime DateVal;
            if (!DateTime.TryParseExact(txtDate.Text, "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None, out DateVal))
            {
                txtDate.Focus();
                MessageBox.Show(UpdateUI.GetString("ngaybatdaunghikhonghople"), UIParamater.TitleProject, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
            int _dec;
            if (!int.TryParse(txtIntime.Text, out _dec))
            {
                txtIntime.Focus();
                MessageBox.Show("Số ngày nghỉ không hợp lệ", "Thông báo", MessageBoxButtons.OK);
                return false;
            }
            if (!int.TryParse(txtInherit.Text, out _dec))
            {
                txtInherit.Focus();
                MessageBox.Show("Số ngày lũy kế không hợp lệ", "Thông báo", MessageBoxButtons.OK);
                return false;
            }
            return true;
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            if (!CheckValid())
            {
                isChange = true;
                return;
            }
            wcfPensioner = Service.Pensioner();
            Form2Info();
            PensionerInfo.BranchID = Program.intBranchID;
            if (PensionerID > 0)//update
            {
                if (!listRole.Update)
                {
                    MessageBox.Show(UpdateUI.GetString("khongcoquyencapnhat"), UIParamater.TitleProject, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                if (wcfPensioner.Pensioner_Update(PensionerInfo))
                {
                    Program.taskbarNotifier.Show(UpdateUI.GetString("thongbao"), UpdateUI.GetString("capnhatthanhcong"), UIParamater.TIME_MOVE_UP, UIParamater.TIME_SHOW, UIParamater.TIME_MOVE_DOWN);
                    isChange = false;
                    dlgResult = DialogResult.OK;
                }
                else
                {
                    MessageBox.Show(UpdateUI.GetString("capnhatkhongthanhcong"), UIParamater.TitleProject, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    isChange = true;
                }
            }
            else//insert
            {
                if (!listRole.Create)
                {
                    MessageBox.Show(UpdateUI.GetString("khongcoquyenthemmoi"), UIParamater.TitleProject, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                PensionerInfo.ID = wcfPensioner.Pensioner_Insert(PensionerInfo);
                PensionerID = PensionerInfo.ID;
                if (PensionerID > 0)
                {
                    Program.taskbarNotifier.Show(UpdateUI.GetString("thongbao"), UpdateUI.GetString("themmoithanhcong"), UIParamater.TIME_MOVE_UP, UIParamater.TIME_SHOW, UIParamater.TIME_MOVE_DOWN);
                    isChange = false;
                    dlgResult = DialogResult.OK;
                }
                else
                {
                    MessageBox.Show(UpdateUI.GetString("themmoikhongthanhcong"), UIParamater.TitleProject, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    isChange = true;
                }
            }
            //Tạo mới
            btnNew.PerformClick();

        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void frmPensionerInfo_KeyUp(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.Escape:
                    this.Dispose();
                    this.Close();
                    break;
                case Keys.F2:
                    btnNew_Click(null, null);
                    break;
                case Keys.F3:
                    btnSave_Click(null, null);
                    break;
                case Keys.Enter:
                    if (!e.Alt && !e.Control)
                    {
                        this.ProcessTabKey(!e.Shift);
                        e.Handled = true;
                    }
                    break;
            }
        }

        private void frmPensionerInfo_FormClosing(object sender, FormClosingEventArgs e)
        {
            //if (isChange)
            //{
            //    if (MessageBox.Show(UpdateUI.GetString("bandathaydoidulieu") + "\n" + UpdateUI.GetString("coluutruockhithoatkhong"), UIParamater.TitleProject, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            //    {
            //        btnSave_Click(null, null);
            //        if (isChange)
            //            e.Cancel = true;
            //        else
            //            e.Cancel = false;
            //    }
            //}
            wcfEmployee.Close();
            wcfMainService.Close();
            wcfPensioner.Close();
            this.DialogResult = dlgResult;

        }


        private void cboGrant_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                UISetting.LoadGrantSub(cboGrant.SelectedValue.ToString(), ref cboSubGrant);

                LoadTyLeHuong();
            }
            catch
            {
            }
        }

        private void LoadTyLeHuong()
        {
            GrantID = Convert.ToInt32(cboGrant.SelectedValue);
            if (GrantID == 1)
            {
                //tỷ lệ hưởng tối đa 75%
                txtRate.Text = HrmResources.TY_LE_HUONG_CHE_DO_OM_DAU;
            }
            else if (GrantID == 2)
            {
                //tỷ lệ hưởng tối đa 100%
                txtRate.Text = HrmResources.TY_LE_HUONG_CHE_DO_THAI_SAN;
            }
            else
            {
                //tỷ lệ hưởng tối đa 25%
                txtRate.Text = HrmResources.TY_LE_HUONG_KHAC;
            }
            //if (GrantID == 1 || GrantID == 3)
            //{
            //    txtAtHome.Visible = false;
            //    lblAtHome.Visible = false;
            //    txtConcentrate.Visible = false;
            //    lblConcentrate.Visible = false;
            //    txtIntime.Visible = true;
            //    lblInTime.Visible = true;
            //    txtInherit.Visible = true;
            //    lblInherit.Visible = true;
            //    txtStateParturition.Visible = false;
            //    lblStatusParturition.Visible = false;
            //    txtInheritFoetus.Visible = false;
            //    lblInheritFoetus.Visible = false;
            //    txtConditionWork.Visible = false;
            //    lblConditionWork.Visible = false;
            //    lblDeclineWork.Visible = false;
            //    txtDeclineWork.Visible = false;
            //}
            //else if (GrantID == 2)
            //{
            //    txtAtHome.Visible = true;
            //    lblAtHome.Visible = true;
            //    txtConcentrate.Visible = true;
            //    lblConcentrate.Visible = true;
            //    txtIntime.Visible = false;
            //    lblInTime.Visible = false;
            //    txtInherit.Visible = false;
            //    lblInherit.Visible = false;
            //    txtStateParturition.Visible = false;
            //    lblStatusParturition.Visible = false;
            //    txtInheritFoetus.Visible = false;
            //    lblInheritFoetus.Visible = false;
            //    lblConditionWork.Visible = true;
            //    txtConditionWork.Visible = true;
            //    lblDeclineWork.Visible = false;
            //    txtDeclineWork.Visible = false;
            //}
            //else if (GrantID == 4)
            //{
            //    txtAtHome.Visible = true;
            //    lblAtHome.Visible = true;
            //    txtConcentrate.Visible = true;
            //    lblConcentrate.Visible = true;
            //    txtIntime.Visible = false;
            //    lblInTime.Visible = false;
            //    txtInherit.Visible = false;
            //    lblInherit.Visible = false;
            //    txtStateParturition.Visible = true;
            //    lblStatusParturition.Visible = true;
            //    txtInheritFoetus.Visible = true;
            //    lblInheritFoetus.Visible = true;
            //    lblConditionWork.Visible = false;
            //    txtConditionWork.Visible = false;
            //    lblDeclineWork.Visible = false;
            //    txtDeclineWork.Visible = false;
            //}
            //else if (GrantID == 5)
            //{
            //    txtAtHome.Visible = true;
            //    lblAtHome.Visible = true;
            //    txtConcentrate.Visible = true;
            //    lblConcentrate.Visible = true;
            //    txtIntime.Visible = false;
            //    lblInTime.Visible = false;
            //    txtInherit.Visible = false;
            //    lblInherit.Visible = false;
            //    txtStateParturition.Visible = false;
            //    lblStatusParturition.Visible = false;
            //    txtInheritFoetus.Visible = false;
            //    lblInheritFoetus.Visible = false;
            //    lblConditionWork.Visible = false;
            //    txtConditionWork.Visible = false;
            //    lblDeclineWork.Visible = true;
            //    txtDeclineWork.Visible = true;
            //}
        }



        private void frmOfferedInfo_Activated(object sender, EventArgs e)
        {
            //Language();
        }

        private void txtAmount_Leave(object sender, EventArgs e)
        {
            txtAmount.Text = UISetting.GetDecimalNo(txtAmount.Text).ToString("#,##0.0##");
        }

        private void DataChange(object sender, EventArgs e)
        {
            isChange = true;
        }

        private void txtSalary_Leave(object sender, EventArgs e)
        {
            txtAVGAmount.Text = UISetting.GetDecimalNo(txtAVGAmount.Text).ToString("#,##0.0##");
        }

        private void panel2_Paint(object sender, PaintEventArgs e)
        {

        }
        void GetEmployeeName(int _EmployeeID)
        {
            EmployeeInfo = wcfEmployee.Employee_GetInfo(_EmployeeID);
            txtSIBookNo.Tag = EmployeeInfo.ID;
            txtSIBookNo.Text = EmployeeInfo.SIBookNo;
            txtFullName.Text = EmployeeInfo.LastName + " " + EmployeeInfo.FirstName;
        }

        private void txtSIBookNo_Enter(object sender, EventArgs e)
        {
            txtSIBookNo.SelectAll();
        }

        private void txtSIBookNo_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Down)
            {
                if (lstEmployee.Items.Count > 0)
                {
                    lstEmployee.Focus();
                    for (int i = 0; i < lstEmployee.Items.Count; i++)
                    {
                        if (lstEmployee.Items[i].Selected)
                        {
                            txtSIBookNo.Text = lstEmployee.Items[i].SubItems[0].Text;
                            txtFullName.Text = lstEmployee.Items[i].SubItems[0].Name;
                        }
                    }

                }
            }
        }
        void AutoCompleteEmployee(string Parameter)
        {
            lstEmployee.Items.Clear();
            DataTable dtGL = LocalDB.Employee_GetListByParameter(Parameter.ToLower());
            ListViewItem item;
            if (dtGL != null)
                for (int i = 0; i < dtGL.Rows.Count; i++)
                {
                    item = new ListViewItem(dtGL.Rows[i]["Employee_SIBookNo"].ToString());
                    item.SubItems.Add(dtGL.Rows[i]["FullName"].ToString());
                    item.Tag = Convert.ToInt32(dtGL.Rows[i]["Employee_ID"]);
                    item.Name = dtGL.Rows[i]["FullName"].ToString();
                    item.SubItems.Add(Convert.ToDateTime(dtGL.Rows[i]["Employee_DateOfBirth"]).ToString("dd/MM/yyyy"));
                    lstEmployee.Items.Add(item);
                }
        }
        private void txtSIBookNo_TextChanged(object sender, EventArgs e)
        {
            if (txtSIBookNo.Focused)
            {
                if (txtSIBookNo.Text.Length > 0)
                {
                    AutoCompleteEmployee(txtSIBookNo.Text);
                    if (lstEmployee.Items.Count > 0)
                    {
                        lstEmployee.Visible = true;
                        lstEmployee.HeaderStyle = ColumnHeaderStyle.None;
                        lstEmployee.BringToFront();
                        lstEmployee.Items[0].Selected = true;
                    }
                    else
                        lstEmployee.Visible = false;
                }
                else
                    lstEmployee.Visible = false;
            }
        }
        private void lstEmployee_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (lstEmployee.Items.Count > 0)
                {
                    for (int i = 0; i < lstEmployee.Items.Count; i++)
                    {
                        if (lstEmployee.Items[i].Selected)
                        {
                            lstEmployee.Items[i].BackColor = Color.Yellow;
                            txtSIBookNo.Text = lstEmployee.Items[i].SubItems[0].Text;
                            txtSIBookNo.Tag = lstEmployee.Items[i].Tag;
                            txtFullName.Text = lstEmployee.Items[i].SubItems[0].Name;
                        }
                    }
                }
                lstEmployee.SendToBack();
                txtSIBookNo.Focus();
                lstEmployee.Visible = false;
            }
        }

        private void lstEmployee_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            for (int i = 0; i < lstEmployee.Items.Count; i++)
            {
                if (lstEmployee.Items[i].Selected)
                {
                    txtSIBookNo.Text = lstEmployee.Items[i].SubItems[0].Text;
                    txtSIBookNo.Tag = lstEmployee.Items[i].SubItems[0].Tag;
                    txtFullName.Text = lstEmployee.Items[i].SubItems[0].Name;
                }
            }
            lstEmployee.SendToBack();
            txtSIBookNo.Focus();
            lstEmployee.Visible = false;
        }

        private void txtFromDate_Validated(object sender, EventArgs e)
        {
            if (txtFromDate.Text.Length != 0)
            {
                _fromDate = DateTime.ParseExact(txtFromDate.Text, "dd/MM/yyyy", null);
                if (txtSIBookNo.Text.Length > 0)
                {
                    LoadSalary();
                    //txtInsuranceTime.Text = _wcfPremium.Premium_CountMonth(txtSIBookNo.Text.Trim()).ToString();
                    LoadMinSalary(_fromDate);
                    //txtAVGAmount.Text = _wcfPremium.Premium_GetAVGAmount(_fromDate, txtSIBookNo.Text.Trim()).ToString("#,##0.0##");

                    //TÍnh nghỉ đến tháng qua số con
                    if (cboSubGrant.Text == "Sinh con, nuôi con nuôi")
                    {
                        if( Globals.Object_GetValue<int>(txtChildNumber.Text) > 0 && Globals.Object_GetValue<int>(txtChildNumber.Text) < 10)
                            txtToDate.Text = _fromDate.AddMonths(6 - 1 + Globals.Object_GetValue<int>(txtChildNumber.Text)).ToString("dd/MM/yyyy");
                    }
                    //Calculate();
                }
            }
        }

        private void txtToDate_Validated(object sender, EventArgs e)
        {
            if (txtFromDate.Text.Length != 0 && txtToDate.Text.Length !=0)
                if (!CheckTextValid.IsDateTime(txtFromDate.Text, "dd/MM/yyyy"))
                {
                    txtFromDate.Focus();
                    MessageBox.Show(UpdateUI.GetString("ngaybatdaukhonghople"), UIParamater.TitleProject, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                else if (!CheckTextValid.IsDateTime(txtToDate.Text, "dd/MM/yyyy"))
                {
                    txtToDate.Focus();
                    MessageBox.Show(UpdateUI.GetString("ngayketthuckhonghople"), UIParamater.TitleProject, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                else
                {
                    _fromDate = DateTime.ParseExact(txtFromDate.Text, "dd/MM/yyyy", null);
                    _toDate = DateTime.ParseExact(txtToDate.Text, "dd/MM/yyyy", null);
                    
                    txtCount.Text = (UISetting.GetDay(_fromDate, _toDate) + 1).ToString();
                    txtSoNgayCN.Text = UISetting.CountSunday(_fromDate, _toDate).ToString();

                    //Số ngày nghỉ, còn phụ thuộc vào loại nghỉ, xem có tính lễ, chủ nhật ko
                    int soNgayNghi = 0;
                    
                    switch (cboSubGrant.Text)
                    {
                        case "Bản thân ốm ngắn ngày":
                            soNgayNghi = txtCount.GetValue<int>() - txtSoNgayCN.GetValue<int>();
                            lblChuThichNgayNghi.Text = "(Không tính chủ nhật)";
                            break;
                        case "Bản thân ốm dài ngày":
                            soNgayNghi = txtCount.GetValue<int>();
                            lblChuThichNgayNghi.Text = "(Tính cả ngày lễ, chủ nhật)";
                            break;
                        case "Con ốm":
                            soNgayNghi = txtCount.GetValue<int>() - txtSoNgayCN.GetValue<int>();
                            lblChuThichNgayNghi.Text = "(Không tính chủ nhật)";
                            break;
                        case "Khám thai":
                            soNgayNghi = 1;//nghỉ khám thai 1 ngày
                            txtRate.Text = "100";
                            break;
                        case "Sảy thai, nạo hút thai, thai chết lưu":
                            soNgayNghi = txtCount.GetValue<int>();
                            lblChuThichNgayNghi.Text = "(Tính cả ngày lễ, chủ nhật)";
                            txtRate.Text = "100";
                            break;
                        case "Sinh con, nuôi con nuôi":
                            soNgayNghi = txtCount.GetValue<int>();
                            lblChuThichNgayNghi.Text = "(Tính cả ngày lễ, chủ nhật)";
                            txtRate.Text = "100";
                            break;
                        case "Thực hiện các biện pháp tránh thai":
                            soNgayNghi = txtCount.GetValue<int>();
                            lblChuThichNgayNghi.Text = "(Tính cả ngày lễ, chủ nhật)";
                            txtRate.Text = "100";
                            break;
                        case "Nghỉ tại gia đình":
                        case "Nghỉ tập trung":
                            soNgayNghi = txtCount.GetValue<int>();
                            //if(PensionerID <=0)
                            //    soNgayNghi = 5; //được 5 hoặc 7 ngày nghỉ
                            lblChuThichNgayNghi.Text = "";
                            txtRate.Text = "25";
                            break;
                    }
                    txtIntime.Text = soNgayNghi.ToString();
                    //
                    txtInherit.Text = (soNgayNghi + HRM_Pensioner_Controller.Instance().Pensioner_TongNghiTrongNam(Program.intBranchID, txtSIBookNo.Text, _fromDate.Year)).ToString();
                    //
                    Calculate();
                }
        }
        void LoadSalary()
        {
            DateTime _DateFrom = DateTime.MinValue;
            DateTime docDate = DateTime.MinValue;
            if (DateTextBox.Date_TryParseEx(txtFromDate.Text, ref docDate))
                _DateFrom = docDate;
            //


            //---Lấy 
            decimal dSalary = 0;
            string sFilter = string.Format(CultureInfo.InvariantCulture,
                        "FromDate <= #{0:MM/dd/yyyy}# AND #{0:MM/dd/yyyy}# <= ToDate AND Premium_WorkUnit = '{1}'"
                        , new DateTime(_DateFrom.AddMonths(-1).Year,_DateFrom.AddMonths(-1).Month,1), Program.strBranchCode.ToUpper());
            //
            DataRow [] dr = dtQTBHXH.Select(sFilter);
            
            //Ko có lương liên kề của cùng mã đơn vị hiện tại => lấy lương tháng hiện tại
            if (dr.Length == 0)
            {
                sFilter = string.Format(CultureInfo.InvariantCulture,
                        "FromDate <= #{0:MM/dd/yyyy}# AND #{0:MM/dd/yyyy}# <= ToDate AND Premium_WorkUnit = '{1}'"
                        , _DateFrom, Program.strBranchCode);
                dr = dtQTBHXH.Select(sFilter);
            }
            //ko có lương tháng hiện tại => lấy lương của tháng mới nhất có lương
            //Trừ thai sản
            if (dr.Length == 0 && (cboGrant.Text.Trim().ToLower() == "chế độ ốm đau"))
            {
                sFilter = string.Format(CultureInfo.InvariantCulture,
                        "Premium_WorkUnit = '{0}'"
                        , Program.strBranchCode);
                dr = dtQTBHXH.Select(sFilter,"ToDate DESC").Take(1).ToArray();
            }

            if (dr.Length == 1)
            {
                //Đóng HS, so Amount hoặc so theo type code trong quá trình
                if (dr[0].GetValue<decimal>("Premium_Salary", 0) > 0)
                {
                    dSalary = dr[0].GetValue<decimal>("Premium_Salary", 0);
                    //
                    txtSalary.Tag = "ML";
                }
                else
                {
                    // cộng hệ số, * lương min theo CT
                    dSalary = dr[0].GetValue<decimal>("Premium_BasicFactor", 0)
                        + dr[0].GetValue<decimal>("Premium_PositionFactor", 0)
                        + dr[0].GetValue<decimal>("Premium_SeniorityFactor", 0)
                        + dr[0].GetValue<decimal>("Premium_OverSeniorityFactor", 0)
                        + dr[0].GetValue<decimal>("Premium_AreaFactor", 0)
                        ; 
                    //
                    txtSalary.Tag = "HS";
                }
            }

            txtSalary.Text = dSalary.ToString("#,##0.0##");


            //DataTable dtPD = new DataTable();
            //int n = 0;
            ////dtPD = _wcfDetail.Detail_GetBySIBookNo(txtSIBookNo.Text, Program.strBranchCode, _fromDate).Tables[0];
            //dtPD = _wcfPremium.Premium_GetAmount(_DateFrom, txtSIBookNo.Text.Trim()).Tables[0];
            //n = dtPD.Rows.Count;
            //if (n > 0)
            //{
            //    if (PensionerID == 0)//Neu tao moi thi lay muc luong cu da co:
            //    {
            //        txtSalary.Text = (Convert.ToDecimal(dtPD.Rows[0]["Amount"]) + Convert.ToDecimal(dtPD.Rows[0]["BasicFactor"]) + Convert.ToDecimal(dtPD.Rows[0]["PositionFactor"])).ToString("#,##0.0##");
            //    }
            //}
        }

        void LoadMinSalary(DateTime _DateVal)
        {
            BasicSalaryClient _wcfSalary = Service.BasicSalary();
            BasicSalaryInfo _BasicSalaryInfo = new BasicSalaryInfo();
            _BasicSalaryInfo = _wcfSalary.BasicSalary_GetInfoByDate(_DateVal);
            txtMinSalary.Text = _BasicSalaryInfo.Amount.ToString("#,##0");
            _BasicSalary = _wcfSalary.BasicSalary_GetInfoByDate(DateTime.Now.Date).Amount;
            //có thể lấy qua table cho nhẹ
        }
        void Calculate()
        {
            decimal _Rate = 0;
            decimal _AvgAmount = 0;
            decimal _Amount = 0;
            decimal _TotalDay = 0;
            decimal _MinSalary = 0;
            decimal _Salary = 0;
            decimal _countMonth = 0;
            if (txtRate.Text.Length == 0)
                txtRate.Text = "0";
            if (txtAVGAmount.Text.Length == 0)
                txtAVGAmount.Text = "0";
            if (txtIntime.Text.Length == 0)
                txtIntime.Text = "0";
            _Rate = Convert.ToDecimal(txtRate.Text) / 100;
            _AvgAmount = Convert.ToDecimal(txtAVGAmount.Text);
            _TotalDay = Convert.ToDecimal(txtIntime.Text);
            _MinSalary = Convert.ToDecimal(txtMinSalary.Text);
            _Salary = Convert.ToDecimal(txtSalary.Text);
            
            //-----------------Tính tiền được hưởng theo công thức--------------------


            //---cách tính cũ
            if (cboGrant.Text.Contains("ốm đau"))
            {
                if (_Salary < 20)
                    _Amount = _Salary / 26 * _TotalDay * _Rate * _BasicSalary;
                else
                    _Amount = _Salary / 26 * _TotalDay * _Rate;
            }
            else if (cboSubGrant.Text.Contains("Sinh con"))
            {
                _countMonth = UISetting.GetMonth(UISetting.GetDate(txtFromDate.Text), UISetting.GetDate(txtToDate.Text)) + 1;
                if (_AvgAmount < 20)
                    _Amount = _AvgAmount * _countMonth * _Rate * _MinSalary + _MinSalary * 2;
                else
                    _Amount = _AvgAmount * _countMonth * _Rate + _AvgAmount * 2;
            }
            else
                if (_AvgAmount < 20)
                    _Amount = _AvgAmount / 26 * _TotalDay * _Rate * _MinSalary;
                else
                    _Amount = _AvgAmount / 26 * _TotalDay * _Rate;
            txtAmount.Text = _Amount.ToString("#,##0.0##");


            //--Đóng hệ số quy ra tiền
            if ( Globals.Object_GetValue<String>(txtSalary.Tag) == "HS")
                _Salary = _Salary * _MinSalary;

            //-cách mới
            switch (cboSubGrant.Text)
            {
                //Ốm tháng đầu: tức là tháng liền kề đóng ở mã đơn vị khác

                case "Bản thân ốm ngắn ngày":
                    _Amount = _Salary / 26 * _Rate * _TotalDay;
                    break;
                case "Bản thân ốm dài ngày":
                    //nghỉ trong cùng 1 tháng, nếu số ngày nghỉ >=26 cũng được coi là chẵn tháng
                    bool chanThang = false;
                    int soThang, soNgayLe = 0;

                    if (_fromDate.Month == _toDate.Month && _fromDate.Year == _toDate.Year)
                    {
                        if ( ((_toDate.Date - _fromDate.Date).TotalDays + 1) >= 26)
                        {
                            chanThang = true;
                            soThang = 1;
                            soNgayLe = 0;
                        }
                        else
                        {
                            chanThang = false;
                            soThang = 0;
                            soNgayLe = (int)((_toDate.Date - _fromDate.Date).TotalDays + 1);
                        }
                    }
                    //khác tháng & toDate là ngày cuối cùng của tháng => chẵn tháng
                    else if (UISetting.IsEndOfMonth(_toDate))
                    {
                        chanThang = true;

                        //Nếu ngày từ tháng là 01 => tính số chẵn tháng như sau
                        if (_fromDate.Day == 1)
                        {      
                            soThang = UISetting.GetMonth(_fromDate, _toDate) + 1;
                            soNgayLe = 0;
                        }
                        else
                        {
                            soThang = UISetting.GetMonth(_fromDate, _toDate);
                            soNgayLe = DateTime.DaysInMonth(_fromDate.Year, _fromDate.Month) - _fromDate.Day + 1;
                        }
                    }
                    //khác tháng,   nhưng toDate ko phải ngày cuối cùng
                    else
                    {
                        if (_fromDate.Day == 1)
                        {
                            chanThang = true;
                            soThang = UISetting.GetMonth(_fromDate, _toDate);
                            soNgayLe = _toDate.Day;
                        }
                        else
                        {
                            soThang = UISetting.GetMonth(_fromDate, _toDate) - 1; // GetMonth: chỉ so theo số tháng, ko tính ngày
                            chanThang = soThang > 0;
                            //so ngay le: so ngay lẻ của từ thagns + số ngày lẻ của đến thagns
                            soNgayLe = UISetting.GetDay(_fromDate, _fromDate.AddMonths(1).AddDays(-1)) + _toDate.Day;
                        }
                    }

                    //
                    _Amount = (_Salary * _Rate * soThang) + (_Salary / 26 * _Rate * soNgayLe); //chẵn tháng + só ngày lẻ
                    break; 
                case "Con ốm": //giống bản thân ốm ngắn ngày
                    _Amount = _Salary / 26 * _Rate * _TotalDay;
                    break;
                case "Khám thai":
                case "Sảy thai, nạo hút thai, thai chết lưu":
                case "Thực hiện các biện pháp tránh thai":
                    _AvgAmount = Math.Round(TinhLuongBinhQuan(),2);
                    string LoaiDong = Globals.Object_GetValue<string>(txtSalary.Tag);

                    _Amount = (_AvgAmount * (LoaiDong == "HS" ? _MinSalary : 1 )) / 26 * _Rate * _TotalDay;
                    break;
                case "Sinh con, nuôi con nuôi":
                    _AvgAmount = Math.Round(TinhLuongBinhQuan(), 2);
                    LoaiDong = Globals.Object_GetValue<string>(txtSalary.Tag);
                    
                    int soThangNghi = txtIntime.GetValue<int>() / 30; //bình quân 30 ngày tháng
                    
                    _Amount = (_AvgAmount * (LoaiDong == "HS" ? _MinSalary : 1)) * soThangNghi + (_MinSalary * (soThangNghi - 6 + 1) * 2);
                    break;
                case "Nghỉ tại gia đình":
                case "Nghỉ tập trung":
                    _AvgAmount = 0;
                    _Amount = _MinSalary * _Rate * _TotalDay;
                    txtSalary.Text = txtMinSalary.Text;
                    txtSalary.Tag = "ML";
                    break;
            }
            txtAVGAmount.Text = _AvgAmount.ToString("#,##0.0#");

            //
            txtAmount.Text = _Amount.ToString("#,##0.0#");
        }

        private decimal TinhLuongBinhQuan()
        {
            //Còn thiếu từ ngày 16 trở đi là ăn lương tháng hiện tại
            //VD: nghỉ từ 15/04 ->cuối tháng thì lương bình quân tính từ tháng 4 trở về trước 6 tháng
            //còn nếu nghỉ từ 1->14/04 thì lương bình quân tính từ tháng 3 trở về trước 6 tháng

            string sFilter = string.Format(CultureInfo.InvariantCulture,
                " FromDate < #{0:MM/dd/yyyy}#  AND Premium_WorkUnit = '{1}'"
                        , _fromDate, Program.strBranchCode);
            int SoThang = 0;
            List<Decimal> lstLuong = new List<decimal>();
            decimal dLuongBinhQuan = 0;
            //
            DataRow[] drs = dtQTBHXH.Select(sFilter,"ToDate DESC");
            foreach (DataRow dr in drs)
            {
                //trừ đoạn nghỉ ko tham gia, nếu TS vẫn được tính
                if (Globals.Object_GetValue<decimal>(dr["Premium_Salary"]) + Globals.Object_GetValue<decimal>(dr["Premium_BasicFactor"]) > (decimal)0)
                {
                    //
                    decimal dLuong = Globals.Object_GetValue<decimal>(dr["Premium_Salary"]);
                    if (dLuong <= 0) //đóng hệ số
                        dLuong = dr.GetValue<decimal>("Premium_BasicFactor", 0)
                        + dr.GetValue<decimal>("Premium_PositionFactor", 0)
                        + dr.GetValue<decimal>("Premium_SeniorityFactor", 0)
                        + dr.GetValue<decimal>("Premium_OverSeniorityFactor", 0)
                        + dr.GetValue<decimal>("Premium_AreaFactor", 0); 
                        
                        //* txtMinSalary.GetValue<decimal>();
                    //
                    
                    //

                    DateTime dTmp = dr.GetValue<DateTime>("FromDate", DateTime.MinValue);
                    if (SoThang == 0)
                    {
                        SoThang += UISetting.GetMonth(dTmp, _fromDate) + (_fromDate.Day >= 15 ? 1 : 0);
                        //
                        if (SoThang >= 6)
                            lstLuong.Add(dLuong * 6);
                        else
                            lstLuong.Add(dLuong * (UISetting.GetMonth(dTmp, _fromDate) +  (_fromDate.Day >= 15 ? 1 : 0)) );
                    }
                    else
                    {
                        if (SoThang + Globals.Object_GetValue<int>(dr["Premium_MonthNo"]) >= 6)
                        {
                            //
                            lstLuong.Add(dLuong * (6 - SoThang));
                            SoThang = 6;
                        }
                        else
                        {
                            SoThang+= Globals.Object_GetValue<int>(dr["Premium_MonthNo"]);
                            lstLuong.Add(dLuong * Globals.Object_GetValue<int>(dr["Premium_MonthNo"]));
                        }
                    }

                    //SoThang +=  Globals.Object_GetValue<int>(dr["Premium_MonthNo"]);
                    if (SoThang >= 6)
                        break;
                }
            }

            //Tính lương bình quân
            dLuongBinhQuan = lstLuong.Sum() / (SoThang > 6 ? 6 : SoThang);
            //
            return dLuongBinhQuan;
        }

        private void txtIntime_Leave(object sender, EventArgs e)
        {
            if (txtIntime.Text.Length == 0)
                txtIntime.Text = "0";
            Calculate();
        }


        //----------------------------Thông tin thêm--------------
        private void TabQTBHXH_AddColumnPremium()
        {
            if (dgvPremium_QTBHXH.ColumnCount <= 0)
            {
                UISetting.AddColumn(ref dgvPremium_QTBHXH, "Premium_WorkUnit", UpdateUI.GetString("donvilamviec"), "", 80, true, true);
                UISetting.AddColumn(ref dgvPremium_QTBHXH, "Premium_FromDate", "Từ tháng", "C", 80, true, true);
                //--UISetting.AddColumn(ref dgvPremium_QTBHXH, "Premium_ToDate", "Đến tháng", "C", 80, true, true);
                UISetting.AddColumn(ref dgvPremium_QTBHXH, "Premium_ToDate_Chuan", "Đến tháng", "C", 80, true, true);
                UISetting.AddColumn(ref dgvPremium_QTBHXH, "Premium_Salary", "ML", "R", 70, true, true);
                UISetting.AddColumn(ref dgvPremium_QTBHXH, "Premium_BasicFactor", "HSL", "R", 60, true, true);
                UISetting.AddColumn(ref dgvPremium_QTBHXH, "Premium_PositionFactor", "HS Cvụ", "R", 60, true, true);
                UISetting.AddColumn(ref dgvPremium_QTBHXH, "Premium_SeniorityFactorPercent", "% TNNghề", "R", 60, true, true);
                UISetting.AddColumn(ref dgvPremium_QTBHXH, "Premium_SeniorityFactor", "HS TNNghề", "R", 60, true, true);
                UISetting.AddColumn(ref dgvPremium_QTBHXH, "Premium_OverSeniorityFactorPercent", "% TNVK", "R", 60, true, true);
                UISetting.AddColumn(ref dgvPremium_QTBHXH, "Premium_OverSeniorityFactor", "HS TNVK", "R", 60, true, true);
                UISetting.AddColumn(ref dgvPremium_QTBHXH, "Premium_AreaFactor", "HS KV", "R", 60, false, true);
                UISetting.AddColumn(ref dgvPremium_QTBHXH, "Premium_MonthNo", "Số tháng", "R", 60, true, true);
                UISetting.AddColumn(ref dgvPremium_QTBHXH, "PA", "PA", "R", 60, true, true);
                UISetting.AddColumn(ref dgvPremium_QTBHXH, "LoaiPs", "Loại", "C", 60, true, true);
                UISetting.AddColumn(ref dgvPremium_QTBHXH, "Premium_Job", UpdateUI.GetString("nghenghiep"), "", 100, true, true);
                UISetting.AddColumn(ref dgvPremium_QTBHXH, "Premium_Description", UpdateUI.GetString("ghichu"), "", 100, false, true);
            }
        }

        DataTable dtQTBHXH, dtLuongTT;

        private void TabQTBHXH_LoadPremium(string _SIBookNo)
        {
            try
            {
                int soThangThamGia = 0;
                //
                PremiumClient _wcfPremium = Service.Premium();
                int _opt = 0;
                dtQTBHXH = _wcfPremium.Premium_QTBH(Program.strBranchCode, _SIBookNo, _opt, DateTime.MinValue, DateTime.MaxValue, 0).Tables[0];
                dgvPremium_QTBHXH.Rows.Clear();
                if (dtQTBHXH != null)
                {
                    if (!dtQTBHXH.Columns.Contains("FromDate"))
                    {
                        dtQTBHXH.Columns.Add("FromDate", typeof(DateTime));
                        dtQTBHXH.Columns.Add("ToDate", typeof(DateTime));
                    }
                    //
                    
                    for (int i = 0; i < dtQTBHXH.Rows.Count; i++)
                    {
                        dtQTBHXH.Rows[i]["FromDate"] = Convert.ToDateTime(dtQTBHXH.Rows[i]["Premium_FromDate"]);
                        dtQTBHXH.Rows[i]["ToDate"] = Convert.ToDateTime(dtQTBHXH.Rows[i]["Premium_ToDate_Chuan"]);
                        //
                        dgvPremium_QTBHXH.Rows.Insert(i, 1);
                        dgvPremium_QTBHXH.Rows[i].Cells["Premium_WorkUnit"].Value = dtQTBHXH.Rows[i]["Premium_WorkUnit"].ToString();
                        dgvPremium_QTBHXH.Rows[i].Cells["Premium_FromDate"].Value = Convert.ToDateTime(dtQTBHXH.Rows[i]["Premium_FromDate"]).ToString("MM/yyyy");
                        //--dgvPremium_QTBHXH.Rows[i].Cells["Premium_ToDate"].Value = Convert.ToDateTime(dtQTBHXH.Rows[i]["Premium_ToDate"]).ToString("MM/yyyy");
                        dgvPremium_QTBHXH.Rows[i].Cells["Premium_ToDate_Chuan"].Value = Convert.ToDateTime(dtQTBHXH.Rows[i]["Premium_ToDate_Chuan"]).ToString("MM/yyyy");
                        dgvPremium_QTBHXH.Rows[i].Cells["LoaiPs"].Value = dtQTBHXH.Rows[i]["LoaiPs"].ToString();
                        dgvPremium_QTBHXH.Rows[i].Cells["Premium_Job"].Value = dtQTBHXH.Rows[i]["Premium_Job"].ToString();
                        dgvPremium_QTBHXH.Rows[i].Cells["Premium_Salary"].Value = dtQTBHXH.Rows[i]["Premium_Salary"] == DBNull.Value ? "0" : Convert.ToDecimal(dtQTBHXH.Rows[i]["Premium_Salary"]).ToString("#,##0");
                        dgvPremium_QTBHXH.Rows[i].Cells["Premium_BasicFactor"].Value = dtQTBHXH.Rows[i]["Premium_BasicFactor"] == DBNull.Value ? "0" : Convert.ToDecimal(dtQTBHXH.Rows[i]["Premium_BasicFactor"]).ToString("#0.0##");
                        dgvPremium_QTBHXH.Rows[i].Cells["Premium_PositionFactor"].Value = dtQTBHXH.Rows[i]["Premium_PositionFactor"] == DBNull.Value ? "0" : Convert.ToDecimal(dtQTBHXH.Rows[i]["Premium_PositionFactor"]).ToString("#0.0##");

                        dgvPremium_QTBHXH.Rows[i].Cells["Premium_SeniorityFactor"].Value = dtQTBHXH.Rows[i]["Premium_SeniorityFactor"] == DBNull.Value ? "0" : Convert.ToDecimal(dtQTBHXH.Rows[i]["Premium_SeniorityFactor"]).ToString("#0.0##");

                        dgvPremium_QTBHXH.Rows[i].Cells["Premium_OverSeniorityFactor"].Value = dtQTBHXH.Rows[i]["Premium_OverSeniorityFactor"] == DBNull.Value ? "0" : Convert.ToDecimal(dtQTBHXH.Rows[i]["Premium_OverSeniorityFactor"]).ToString("#0.0##");

                        dgvPremium_QTBHXH.Rows[i].Cells["Premium_AreaFactor"].Value = dtQTBHXH.Rows[i]["Premium_AreaFactor"] == DBNull.Value ? "0" : Convert.ToDecimal(dtQTBHXH.Rows[i]["Premium_AreaFactor"]).ToString("#0.0##");
                        if (dtQTBHXH.Rows[i]["Premium_MonthNo"].ToString() != "0")
                            dgvPremium_QTBHXH.Rows[i].Cells["Premium_MonthNo"].Value = dtQTBHXH.Rows[i]["Premium_MonthNo"].ToString();
                        else
                            dgvPremium_QTBHXH.Rows[i].Cells["Premium_MonthNo"].Value = (UISetting.GetMonth(Convert.ToDateTime(dtQTBHXH.Rows[i]["Premium_FromDate"]), Convert.ToDateTime(dtQTBHXH.Rows[i]["Premium_ToDate_Chuan"])) + 1).ToString();
                        //

                        //trừ đoạn nghỉ ko tham gia, nếu TS vẫn được tính

                        if ((dtQTBHXH.Rows[i].GetValue<decimal>("Premium_Salary", 0) + dtQTBHXH.Rows[i].GetValue<decimal>("Premium_BasicFactor", 0) > 0)
                            || dtQTBHXH.Rows[i].GetValue<string>("Detail_InsTypeCode", "") == "TS")
                            soThangThamGia += dtQTBHXH.Rows[i].GetValue<int>("Premium_MonthNo", 0);
                        //if ((Globals.Object_GetValue<decimal>(dtQTBHXH.Rows[i]["Premium_Salary"]) + Globals.Object_GetValue<decimal>(dtQTBHXH.Rows[i]["Premium_BasicFactor"]) > (decimal)0)
                         //   || dtQTBHXH.Rows[i]["Detail_InsTypeCode"].ToString() == "TS")
                         //   soThangThamGia += Globals.Object_GetValue<int>(dgvPremium_QTBHXH.Rows[i].Cells["Premium_MonthNo"].Value);

                        //
                        string PA = dtQTBHXH.Rows[i]["Detail_InsTypeCode"].ToString();
                        PA = "ON,TS,OF".IndexOf(PA) > 0 ? PA : "";
                        dgvPremium_QTBHXH.Rows[i].Cells["PA"].Value = PA;
                        dgvPremium_QTBHXH.Rows[i].Cells["Premium_Description"].Value = dtQTBHXH.Rows[i]["Premium_Description"].ToString();
                        if (dgvPremium_QTBHXH.Rows[i].Cells["Premium_WorkUnit"].Value.ToString() == "")
                        {
                            dgvPremium_QTBHXH.Rows[i].DefaultCellStyle.BackColor = Color.Yellow;
                            dgvPremium_QTBHXH.Rows[i].DefaultCellStyle.SelectionBackColor = Color.Yellow;
                        }

                        //Tính % nghề, vk

                        decimal BasicFactor = UISetting.GetDecimalNo(dgvPremium_QTBHXH.Rows[i].Cells["Premium_BasicFactor"].Value.ToString());
                        decimal PosionFactor = UISetting.GetDecimalNo(dgvPremium_QTBHXH.Rows[i].Cells["Premium_PositionFactor"].Value.ToString());
                        decimal OverFactor = UISetting.GetDecimalNo(dgvPremium_QTBHXH.Rows[i].Cells["Premium_OverSeniorityFactor"].Value.ToString());
                        decimal JobFactor = UISetting.GetDecimalNo(dgvPremium_QTBHXH.Rows[i].Cells["Premium_SeniorityFactor"].Value.ToString());
                        //
                        if (OverFactor != 0)
                        {
                            decimal OverFactor_Percent = (OverFactor * 100 / BasicFactor);
                            dgvPremium_QTBHXH.Rows[i].Cells["Premium_OverSeniorityFactorPercent"].Value = Math.Round(OverFactor_Percent).ToString();
                        }
                        if (JobFactor != 0)
                        {
                            decimal JobFactor_Percnet = (JobFactor * 100 / (BasicFactor + PosionFactor + OverFactor));
                            dgvPremium_QTBHXH.Rows[i].Cells["Premium_SeniorityFactorPercent"].Value = Math.Round(JobFactor_Percnet).ToString();
                        }
                    }
                }
                txtInsuranceTime.Text = soThangThamGia.ToString(); //so thang, tham gia BHXH
            }
            catch (Exception ex)
            {
                MessageBox.Show(UpdateUI.GetString("loi") + ":\n" + ex.Message + "\n" + UpdateUI.GetString("ghiloi"));
            }
        }


        private void BuildBasicSalaryGrid()
        {
            UISetting.AddColumn(ref dgvLuongToiThieu, "ROWNUMBER", "STT", "C", 70, true, true);
            UISetting.AddColumn(ref dgvLuongToiThieu, "BasicSalary_ID", "Mã Chính", "C", 100, false, true);
            UISetting.AddColumn(ref dgvLuongToiThieu, "BasicSalary_Month", "Tháng năm", "L", 120, true, true);
            UISetting.AddColumn(ref dgvLuongToiThieu, "BasicSalary_Amount", "Số tiền", "C", 150, true, true);

        }
        void LoadBasicSalary()
        {
            int itemCount = 0, currPage = 0, pageSize = 99999;
            DataSet ds = _wcfBasicSalary.BasicSalary_GetList(out itemCount, currPage, pageSize);
            dtLuongTT = ds.Tables[0];
            dgvLuongToiThieu.Rows.Clear();
            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                dgvLuongToiThieu.Rows.Insert(i, 1);

                dgvLuongToiThieu.Rows[i].Cells["ROWNUMBER"].Value = ds.Tables[0].Rows[i]["ROWNUMBER"].ToString();
                dgvLuongToiThieu.Rows[i].Cells["BasicSalary_ID"].Value = ds.Tables[0].Rows[i]["BasicSalary_ID"].ToString();
                dgvLuongToiThieu.Rows[i].Cells["BasicSalary_Month"].Value = Convert.ToDateTime(ds.Tables[0].Rows[i]["BasicSalary_Month"].ToString()).ToString("MM/yyyy");
                dgvLuongToiThieu.Rows[i].Cells["BasicSalary_Amount"].Value = Convert.ToDecimal(ds.Tables[0].Rows[i]["BasicSalary_Amount"].ToString()).ToString("#,##0");
            }
        }

        private void txtSIBookNo_Validated(object sender, EventArgs e)
        {
            //Load quá trình của số sổ hiện tại
            TabQTBHXH_LoadPremium(txtSIBookNo.Text);
        }

        private void lblInheritFoetus_Click(object sender, EventArgs e)
        {

        }

        private void cboSubGrant_SelectedIndexChanged(object sender, EventArgs e)
        {
            LoadTyLeHuong();
            if( cboSubGrant.Text == "Sinh con, nuôi con nuôi")
            {
                txtDateOfBirth.ReadOnly = txtChildNumber.ReadOnly = false;
            }
            else
            {
                txtDateOfBirth.ReadOnly = txtChildNumber.ReadOnly = true;
                txtDateOfBirth.Text = txtChildNumber.Text = "";
            }
        }
    }
}
